package org.cytoscape.rest.internal.serializer;
import java.io.IOException;
import java.util.List;
import java.util.Set;
import org.cytoscape.group.CyGroup;
import org.cytoscape.model.CyEdge;
import org.cytoscape.model.CyIdentifiable;
import org.cytoscape.model.CyNode;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
public class GroupSerializer extends JsonSerializer<CyGroup> {
@Override
public Class<CyGroup> handledType() {
return CyGroup.class;
}
@Override
public void serialize(final CyGroup group, JsonGenerator jgen, SerializerProvider provider) throws IOException,
JsonProcessingException {
jgen.useDefaultPrettyPrinter();
jgen.writeStartObject();
final CyNode groupNode = group.getGroupNode();
final List<CyNode> memberNodes = group.getNodeList();
final List<CyEdge> internalEdges = group.getInternalEdgeList();
final Set<CyEdge> externalEdges = group.getExternalEdgeList();
jgen.writeNumberField(CyIdentifiable.SUID, groupNode.getSUID());
// TODO: Bug? Always false
// jgen.writeBooleanField("collapsed", group.isCollapsed(group.getRootNetwork()));
jgen.writeArrayFieldStart("nodes");
for (final CyNode node : memberNodes) {
jgen.writeNumber(node.getSUID());
}
jgen.writeEndArray();
jgen.writeArrayFieldStart("internal_edges");
for (final CyEdge edge : internalEdges) {
jgen.writeNumber(edge.getSUID());
}
jgen.writeEndArray();
jgen.writeArrayFieldStart("external_edges");
for (final CyEdge edge : externalEdges) {
jgen.writeNumber(edge.getSUID());
}
jgen.writeEndArray();
jgen.writeEndObject();
}
}